package cn.com.surker.sale.service;

import cn.com.surker.system.entity.DataSourceInfo;

import java.util.List;
import java.util.Map;

/**
 * @Author lucky
 * @create 2021年04月26 15:22
 * @desc 销售合同及客户管理业务类
 */
public interface IContractService {

    /**
     * 合同方量不足预警消息推送
     *
     * @param ds
     */
    List<Map<String, Object>> contractWaring(DataSourceInfo ds, String startTime, String endTime);

    /**
     * 根据合同ID查询合同
     *
     * @param ds
     * @param id 合同ID
     * @return
     */
    Map<String, Object> queryContractById(DataSourceInfo ds, Long id);

    /**
     * 修改合同状态
     *
     * @param ds
     * @param id     合同ID
     * @param status 合同状态
     * @return
     */
    Integer updateStatus(DataSourceInfo ds, Long id, Integer status, Long updator, String code);

    /**
     * 查询回款方式
     *
     * @param ds
     * @return
     */
    List<Map<String, Object>> queryPayTypeAll(DataSourceInfo ds);

    /**
     * 查询合同签订人员
     *
     * @param ds
     * @param startTime
     * @param endTime
     * @return
     */
    List<Map<String, Object>> querySalesManAll(DataSourceInfo ds, String startTime, String endTime);

    /**
     * 查询所有合同
     *
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @param code       合同编号
     * @param name       合同名称
     * @param clientName 客户名称
     * @return
     */
    Map<String, Object> queryContractAll(DataSourceInfo ds, String startTime, String endTime, String code,
                                         String name, String clientName, Integer offset, Integer limit);

    /**
     * 查询合同信息
     *
     * @param ds
     * @param startTime
     * @param endTime
     * @param code
     * @param name
     * @param clientName
     * @param foremanName
     * @param offset
     * @param limit
     * @return
     */
    Map<String, Object> queryContractAll(DataSourceInfo ds, String startTime, String endTime, String code,
                                         String name, String clientName, String foremanName, Integer offset, Integer limit);

    /**
     * 查询合同信息
     *
     * @param ds
     * @param startTime
     * @param endTime
     * @param code
     * @param name
     * @param clientName
     * @param foremanName 前场工长
     * @param saleName    销售人员
     * @param offset
     * @param limit
     * @return
     */
    Map<String, Object> queryContractAll(DataSourceInfo ds, String startTime, String endTime, String code,
                                         String name, String clientName, String foremanName, String saleName, Integer offset, Integer limit);

    List<Long> queryContractAllIds(DataSourceInfo ds, String startTime, String endTime, String code,
                                   String name, String clientName, String foremanName, String saleName, Integer offset, Integer limit);

    /**
     * 查询强度等级
     *
     * @param name
     * @return
     */
    Map<String, Object> queryConcreteStrength(DataSourceInfo ds, String name);

    /**
     * 根据ERP合同id查询标号
     * @param contractErpId
     * @param orgId
     * @return
     */
    Map<String, Object> queryConcreteStrengthV1(Long contractErpId, Long orgId);

	Map<String, Object> queryConcreteStrength2(DataSourceInfo ds, Long conId, String name);

    /**
     * 查询标号信息
     *
     * @param cid
     * @return
     */
    Map<String, Object> queryPrice(DataSourceInfo ds, Integer cid);

	/**
	 * 查询合同关联的砼标号信息
	 *
	 * @param ds         数据源
	 * @param cid        合同id
	 * @param strengthId 强度等级
	 * @return
	 */
	List<Map<String, Object>> queryLevelPrice(DataSourceInfo ds, Long cid, Long strengthId);

	/**
	 * 查询合同关联的砼标号信息
	 *
	 * @param ds
	 * @param cid
	 * @param strengthLevel 强度等级
	 * @return
	 */
	List<Map<String, Object>> queryLevelPrice(DataSourceInfo ds, Long cid, String strengthLevel);

    /**
     * 添加标号
     *
     * @param cid        合同ID
     * @param strengthId 标号信息
     * @param creator    业务人员
     * @param price      标号价格
     * @return
     */
    Integer addPrice(DataSourceInfo ds, Integer cid, Integer strengthId, Integer creatorId, String creator, Double price, String level);

    /**
     * 追加方量
     *
     * @param cid       合同ID
     * @param volume    追加值
     * @param creatorId 操作人
     * @return
     */
    Integer addVolume(DataSourceInfo ds, Integer cid, Double volume, Integer creatorId, String creator, String remark);

    /**
     * 获取制作人员信息
     *
     * @return
     */
    Map<String, Object> queryCreator(DataSourceInfo ds);

    /**
     * 获取报表抬头信息
     *
     * @return
     */
    Map<String, Object> queryReportInfo(DataSourceInfo ds);

    /**
     * 新建合同
     *
     * @param name             合同名称
     * @param developmentUnits 客户名称
     * @param salesMan         业务员
     * @param contractStere    合同方量
     * @param signDate         签订日期
     * @param address          地址
     * @param loadDistance     运距
     * @param remark           备注
     * @param creatorId        创建人ID
     * @param creator          创建人
     * @param reportId         报表抬头ID
     * @param reportName       报表抬头
     * @param username         制表人员
	 * @param dtype 1商砼合同，2预拌砂浆合同，3水稳层合同，4全轻商砼合同，5预制件合同
     * @return
     */
    Integer saveContract(DataSourceInfo ds, String name, String developmentUnits, String salesMan, Integer clientId,
                         Double contractStere, String signDate, String address, Double loadDistance, String remark,
                         Long creatorId, String creator, Integer reportId, String reportName, String username,
                         Integer property, Integer dtype, Integer status, String taxNo, String contractCode, Long groupId);

    /**
     * 查询所有客户
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param code      客户编号
     * @param name      客户名称
     * @return
     */
    Map<String, Object> queryClientAll(DataSourceInfo ds, String startTime, String endTime, String code,
                                       String name, Integer offset, Integer limit);

    /**
     * 查询所有客户信息
     *
     * @return
     */
    Map<String, Object> queryClientAll(DataSourceInfo ds);

    /**
     * 修改客户信息
     *
     * @param id
     * @param name
     * @return
     */
    Integer updateClient(DataSourceInfo ds, Integer id, String name, String taxCode);

    /**
     * 新增客户信息
     *
     * @param name
     * @return
     */
    Integer saveClient(DataSourceInfo ds, String name, String taxCode, Long groupId);


    /**
     * 查询销售合同明细
     *
     * @param id
     * @return
     */
    Map<String, Object> queryContractDetails(DataSourceInfo ds, Integer id);

    /**
     * 查询销售合同进度
     *
     * @param id
     * @return
     */
    Map<String, Object> queryContractRate(DataSourceInfo ds, Integer id);

    /**
     * 设置经纬度
     *
     * @param cid       合同id
     * @param longitude 经度
     * @param latitude  纬度
     * @return
     */
    Integer setLocation(DataSourceInfo ds, Integer cid, String longitude, String latitude);

    /**
     * 更新工地导航策略
     *
     * @param ds
     * @param cid
     * @param strategy  导航策略 0:速度优先,19:高速优先,4:躲避拥堵,1:不走高速,2:距离优先
     * @param wayPoints 途经点
     * @return
     */
    Integer updateStrategy(DataSourceInfo ds, Integer cid, Integer strategy, String wayPoints);

    /**
     * 获取合同方量详细信息，如六号线先C30生产1000方、C35生产6000方
     *
     * @param ds          数据源
     * @param startTime   查询合同的起始时间
     * @param endTime     查询合同的截止时间
     * @param name        合同名
     * @param clientName  客户名
     * @param foremanName 前场工长名
     * @param offset
     * @param limit
     * @return
     */
    List<Map<String, Object>> queryDetailStere(DataSourceInfo ds, String startTime, String endTime, String name,
                                               String clientName, String foremanName, Integer offset, Integer limit);

    /**
     * 查询添加方量列表
     *
     * @param ds
     * @param cid 合同ID
     * @return
     */
    List<Map<String, Object>> queryAddStere(DataSourceInfo ds, Integer cid);
}
